gpt4 book ai didi

android - 混淆将代码放入 AsyncTask

转载 作者:行者123 更新时间:2023-11-30 03:32:50 26 4
gpt4 key购买 nike

我有这个代码来接收聊天消息。但是当我试图将它放在 AsyncTask 中时,我感到很困惑。当我将 read.readline() 放入 postexecute 时,我收到警告 read cannot be resolved
我想让这段代码在后台工作,以检查是否有任何消息。我想问一下,要使代码始终在后台运行,是使用 AsyncTask 还是有其他方法可以做到这一点?
任何人都请帮助我,我不知道如何做到这一点。谢谢

接收消息部分

HttpURLConnection connection;
URL url = null;
try{
linkurl = new Koneksi(this);
SERVER_URL = linkurl.getUrl();
SERVER_URL += "/mobile/ChatRoom.php?idu="+param2+"&idch="+param3+"&idcm="+param4;
url = new URL(SERVER_URL);
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestMethod("POST");

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(SERVER_URL);
//ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();
//add parameter
//httpPost.setEntity(new UrlEncodedFormEntity(param));

HttpResponse httpRespose = httpClient.execute(httpPost);
HttpEntity httpEntity = httpRespose.getEntity();

//read content
InputStream in = httpEntity.getContent();
BufferedReader read = new BufferedReader(new InputStreamReader(in));
String msg = "tes";
while(true)
{

try {
msg = read.readLine();
Log.d("","MSGGG: "+ msg);

//msgList.add(msg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.getMessage();
}
if(msg == null)
{
break;
}
else
{
showMessage(msg, false);
}
}}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

我尝试过的 AsyncTask 部分 - 已更新但在 getintent() 我必须将这些代码放在哪里时收到警告?

public class ReceivedTask extends AsyncTask<String, String, String> {

Bundle bundle = this.getIntent().getExtras();
final String param2 = bundle.getString("keyUserId");
final String param3 = bundle.getString("keyChatsId");
String param4 = bundle.getString("keyMessagesId");

@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}

@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub

HttpURLConnection connection;
URL url = null;
try{
linkurl = new Koneksi(ChatRoom.this);
SERVER_URL = linkurl.getUrl();
SERVER_URL += "/mobile/ChatRoom.php?idu="+param2+"&idch="+param3+"&idcm="+param4;
url = new URL(SERVER_URL);
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestMethod("POST");

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(SERVER_URL);
//ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();
//add parameter
//httpPost.setEntity(new UrlEncodedFormEntity(param));

HttpResponse httpRespose = httpClient.execute(httpPost);
HttpEntity httpEntity = httpRespose.getEntity();

//read content
InputStream in = httpEntity.getContent();
BufferedReader read = new BufferedReader(new InputStreamReader(in));
String msg = "tes";
while(true)
{

try {
msg = read.readLine();
Log.d("","MSGGG: "+ msg);

//msgList.add(msg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.getMessage();
}
if(msg == null)
{
break;
}
else
{
showMessage(msg, false);
}
}}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

ChatRoom.java - 我的完整代码

public class ChatRoom extends Activity {
public Koneksi linkurl;
String SERVER_URL;
private EditText messageText;
private TextView meLabel;
private TextView friendLabel;
private ViewGroup messagesContainer;
private ScrollView scrollContainer;
/* private Handler handler = new Handler();*/

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chatpage);

messagesContainer = (ViewGroup) findViewById(R.id.messagesContainer);
scrollContainer = (ScrollView) findViewById(R.id.scrollContainer);

Button sendMessageButton = (Button) findViewById(R.id.sendButton);

Bundle bundle = this.getIntent().getExtras();
/*final String paramnama = bundle.getString("nama");*/
messageText = (EditText) findViewById(R.id.messageEdit);
meLabel = (TextView) findViewById(R.id.meLabel);
friendLabel = (TextView) findViewById(R.id.friendLabel);
meLabel.setText("me");


final String param1 = bundle.getString("keyCourseId");
final String param2 = bundle.getString("keyUserId");
final String param3 = bundle.getString("keyChatsId");
String param4 = bundle.getString("keyMessagesId");


sendMessageButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("messages", messageText.getText().toString()));

String response = null;

try {
linkurl = new Koneksi(ChatRoom.this);
SERVER_URL = linkurl.getUrl();
SERVER_URL += "/mobile/ChatKirimTeks.php?idu="+param2+"&idch="+param3;
response = CourseHttpClient.executeHttpPost(SERVER_URL, postParameters);

String res = response.toString();

res = res.trim();

res = res.replaceAll("\\s+","");
if(res.equals("1")){
String messageString = messageText.getText().toString();
showMessage(messageString, true);
messageText.getText().clear();
}else
{
createDialog("Maaf", "Messages Anda Gagal Terkirim");
}
}

catch (Exception e) {

messageText.setText(e.toString());

}

}

});


HttpURLConnection connection;
URL url = null;
try{
linkurl = new Koneksi(this);
SERVER_URL = linkurl.getUrl();
SERVER_URL += "/mobile/ChatRoom.php?idu="+param2+"&idch="+param3+"&idcm="+param4;
url = new URL(SERVER_URL);
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestMethod("POST");

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(SERVER_URL);
//ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();
//add parameter
//httpPost.setEntity(new UrlEncodedFormEntity(param));

HttpResponse httpRespose = httpClient.execute(httpPost);
HttpEntity httpEntity = httpRespose.getEntity();

//read content
InputStream in = httpEntity.getContent();
BufferedReader read = new BufferedReader(new InputStreamReader(in));
String msg = "tes";
while(true)
{

try {
msg = read.readLine();
Log.d("","MSGGG: "+ msg);

//msgList.add(msg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.getMessage();
}
if(msg == null)
{
break;
}
else
{
showMessage(msg, false);
}
}}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}


public class ReceivedTask extends AsyncTask<String, String, String> {

@Override
protected void onPreExecute() {

}

@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
HttpURLConnection connection;
URL url = null;
try{
linkurl = new Koneksi(ChatRoom.this);
SERVER_URL = linkurl.getUrl();
SERVER_URL += "/mobile/ChatRoom.php?idu="+param2+"&idch="+param3+"&idcm="+param4;
url = new URL(SERVER_URL);
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestMethod("POST");

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(SERVER_URL);
//ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();
//add parameter
//httpPost.setEntity(new UrlEncodedFormEntity(param));

HttpResponse httpRespose = httpClient.execute(httpPost);
HttpEntity httpEntity = httpRespose.getEntity();

//read content
InputStream in = httpEntity.getContent();
BufferedReader read = new BufferedReader(new InputStreamReader(in));
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}

}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
String msg = "tes";
while(true)
{

try {
msg = read.readLine();
Log.d("","MSGGG: "+ msg);

//msgList.add(msg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.getMessage();
}
if(msg == null)
{
break;
}
else
{
showMessage(msg, false);
}
}
}
}

public void showMessage(String message, boolean leftSide) {
final TextView textView = new TextView(ChatRoom.this);
textView.setTextColor(Color.BLACK);
textView.setText(message);

int bgRes = R.drawable.left_message_bg;

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);

if (!leftSide) {
bgRes = R.drawable.right_message_bg;
params.gravity = Gravity.RIGHT;
}

textView.setLayoutParams(params);

textView.setBackgroundResource(bgRes);

runOnUiThread(new Runnable() {
@Override
public void run() {
messagesContainer.addView(textView);

// Scroll to bottom
if (scrollContainer.getChildAt(0) != null) {
scrollContainer.scrollTo(scrollContainer.getScrollX(), scrollContainer.getChildAt(0).getHeight());
}
scrollContainer.fullScroll(View.FOCUS_DOWN);
}
});
}

private void createDialog(String title, String text) {
AlertDialog ad = new AlertDialog.Builder(this)
.setPositiveButton("Ok", null)
.setTitle(title)
.setMessage(text)
.create();
ad.show();
}
}

最佳答案

您收到错误消息 read cannot be resolved 因为 Android 禁止您从用户界面线程访问互联网。您必须在后台线程中执行此操作。事实上,使用 AsyncTask 的目的是让用户界面线程尽可能自由。

每当我使用AsyncTask 时,我通常会创建一个类来保存任务的所有参数,并创建另一个类来保存结果。此外,我确保结果类可以表示可能发生的任何错误情况,例如抛出异常。所以我使用的通用模板看起来像这样(注意:这是在不需要进度报告时使用的)。

public class MyActivity extends Activity {

static class MyAsyncTaskParameters {
// put all the parameters that the task will need here
}

void KickOffAsynctask(...) { // various arguments as required by the task in hand
MyAsyncTaskParameters params = new MyAsyncTaskParameters(...); // package up all the parameters
MyAsyncTask newtask = new MyAsyncTask();
newtask.execute(params);
}

static class MyAsyncTaskResults {
// put all the results that the task can generate here
// NOTE: errors can occur in tasks, also exceptions
// can be thrown in tasks, so make it possible
// for this class to describe all error conditions that can occur
}

static class MyAsyncTask extends AsyncTask<MyAsyncTaskParameters, Void, MyAsyncTaskResults> {

@Override
protected MyAsyncTaskResults doInBackground(MyAsyncTaskParameters... params) {
MyAsyncTaskResults results = new MyAsyncTaskResults();
try {
MyAsyncTaskParameters taskParameters = params[0];
// This method will run in a background thread, so
// do as much as possible of the AsyncTask here.
} catch (Throwable e) {
// Set results object to indicate that an exception occurred.
}
return results;
}

@Override
protected void onPostExecute(MyAsyncTaskResults res) {
// This method will run in the User Interface thread.
// Use it to deal with the results stored in res.
// If an error has occurred, the res object will have it stored
// so take appropriate action, e.g. report to user.
}

}

}

关于android - 混淆将代码放入 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17161188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com