Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从线程发送意图_Android_Multithreading_Android Intent - Fatal编程技术网

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传递。)。