Android 从线程发送意图
我想做的事Android 从线程发送意图,android,multithreading,android-intent,Android,Multithreading,Android Intent,我想做的事 大家好,我正在尝试创建一个登录屏幕,连接到我的服务器。为此,我创建了一个方法,该方法位于我的活动之外的其他包中。我在我的活动中使用这种方法,它就像一个魔咒 现在问题开始了,当我试图从我的方法(线程)返回一个意图时,这是不可能的。你怎么能意识到这一点 为此,我也首先搜索了Stackoverflow并找到了这篇文章:但我不知道这应该如何工作,所以我再次问 问题 所以我的问题。我想知道如何将意图从我的线程传递到我的活动。我想做的很简单。如果你有一些例子或一个好的教程,我请张贴在awns
大家好,我正在尝试创建一个登录屏幕,连接到我的服务器。为此,我创建了一个方法,该方法位于我的活动之外的其他包中。我在我的活动中使用这种方法,它就像一个魔咒 现在问题开始了,当我试图从我的方法(线程)返回一个意图时,这是不可能的。你怎么能意识到这一点 为此,我也首先搜索了Stackoverflow并找到了这篇文章:但我不知道这应该如何工作,所以我再次问 问题
所以我的问题。我想知道如何将意图从我的线程传递到我的活动。我想做的很简单。如果你有一些例子或一个好的教程,我请张贴在awnsers 在这里,我会提供你需要的代码,让你得到我想要做的 代码
数据处理程序
package de.ivocore.service;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.protocol.HTTP;
import org.json.JSONObject;
import de.ivocore.LoginActivity;
import android.content.Intent;
import android.os.Looper;
import android.util.Log;
public class DataHandler {
/** LOGIN-Methode
* Für diese Methode muss ein "final String username" sowie ein "final String password" mitgegeben werden
* Die Methode fürt die Login-Prozedur mit dem api.i-v-o.ch durch.
* Zurückgeben wird die Response welche vom Server kommt (Login erfolgreich oder nicht), sowie der Sessionkey.
* */
public void JSONLogin(final String username, final String password){
Thread t = new Thread(){ //Neuen Thread definieren
public void run(){ //Startet automatisch wenn der Thread gestartet wird, führt die Funktion aus
String URL = "CENCORED"; //URL definieren für JSON-Post
DefaultHttpClient client = new DefaultHttpClient(); //HttpClient definieren (DefaultHttpClient(); ist speziel optimiert für Android, darin ist auch der Timeout definiert)
HttpResponse response; //HttpResponse definieren, handelt den http response
JSONObject login = new JSONObject(); //JSON-Object welches gesendet wird
try{
HttpPost post = new HttpPost(URL); //HttpPost definieren, handelt den http post
login.put("username", username); //Füget dem JSONObject Login den Username ein
login.put("password", password); //Fügt dem JSONObject Login das Passwort ein
String test = login.toString(); Log.d("JSON", test);
StringEntity se = new StringEntity("json="+login.toString());
post.setEntity(se);
//post.setHeader("Accept", "application/json");
//hkgvjpost.setHeader("Content-type", "application/json");
response = client.execute(post);
/** Response-Checker
* Hier wird gecheckt was wir in der Response bekommen
*/
if(response != null){ //Hier wird geprüft ob etwas in der Response ist
StringBuilder sb = new StringBuilder(); //Stringbuilder um aus dem Response einen String zu erstellen
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); //response vom inputstreamreader lesen und in einen bufferedreader einfügen um diesen anschliessend zu einem string hinzuzuzfügen und in ein json object umwandeln
String line; //String definieren darin ist die später die response
while ((line = rd.readLine()) != null) { //Hier wird definiert das der String Line den inhalt vom bufferedreader ist, der duchgand wird mit readLine durchgeführt
sb.append(line + "\n"); //Hier wird der string line nach \n gesplittet (newline)
}
String result; //String result definieren
result = sb.toString(); //Hier wird der inhalt vom Stringbuilder zum String result hinzugefühgt
Log.d("DataHandler", "Append String " + result);
if(result != null){
try{
final String userid;
JSONObject holder = new JSONObject(result); //Result in ein JSONObject konvertieren
userid = holder.getString("id");
Log.d("JSON-Response", userid);
final Intent i = new Intent(LoginActivity.this, LoginActivity.class); --> THIS DOSN?T WORK!
i.putExtra("ID", userid);
}catch(Exception e){
e.printStackTrace();
Log.e("DataHandler", "Cannot read JSON"+e);
}
}
}
} catch(Exception e){
e.printStackTrace();
Log.e("DataHandler", "Cannot Estabilish Connection"+e);
}
}
};
t.start(); //Thread starten
}
谢谢你的帮助 祝你今天愉快 使用并将其放在postexecute方法中
替换
最终意图i=新意图(LoginActivity.this,LoginActivity.class);
i、 putExtra(“ID”,userid);
带有
Message progressMsg = new Message();
progressMsg.setData(your bundle);
handler.sendMessage();
在类中添加句柄,如下所示:
Handler handler = new Handler() {
@Override
public void handleMessage(android.os.Message msg) {
Bundle bundle = msg.getData();
Intent i = new Intent(LoginActivity.this, newActivity.class);
i.putExtra("ID", userid);
}
};
希望对您有用…不要使用线程,使用异步任务…异步任务是解决此问题的一种方法。它非常容易使用,而且一点也不过分。或者更好的是,我问如何在我的“活动”中接收该消息的值?使用“发送消息(您的消息)”并在处理程序中获取该消息。您能将其发布到您的anwser吗,我不明白(检查编辑的代码您可以使用bundle传递消息或数据,并使用getData()在处理程序中检索bundle。bundle bundle=msg.getData();在处理程序中,如果您希望将这些数据传递给newActivity,则可以使用putExtra意图方法作为此bundle传递。)。