2012-01-12 2 views
0

Что я пытаюсь сделатьОтправить умысел тему


Привет, ребята, я пытаюсь создать Войти-экран, который connectet к моему серверу. Для этого я создал метод, который находится в другом pakage, чем моя активность. Я использую этот метод в своей Activity, и он работает как charme.

Теперь проблема начинается, когда я пытаюсь передать намерение обратно из моего метода (Thread), это невозможно. Как это понимать?

Для этого я также искал Stackoverflow и нашел это сообщение: pritty much the same problem, но я не понимаю, как это должно работать, поэтому я снова спрашиваю.

Вопрос


Так на мой вопрос. Я хотел бы знать, как я могу передать Intent из моего потока в свою активность. Я бы хотел сделать это очень просто. Если у вас есть образец или хороший учебник, я бы разместил его в awnsers!

Внизу здесь я дам вам код, который вам нужен, чтобы получить то, что я хотел бы сделать.

Код


DataHandler

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 

    } 

Thx за помощь заранее

Иметь хороший день!

+0

Не используйте потоки, используйте asynctask ... – Hades

+1

Задача async - это способы переусердствовать для этого – safari

+0

, он очень прост в использовании, и он не является излишним. – Hades

ответ

1

заменить final Intent i = new Intent(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); 
    } 
}; 

надеюсь полезным для вас ...

+0

все в порядке, а не как намерение? – safari

+0

или лучше, я спрашиваю, как я могу получить значение этого сообщения в моей деятельности? ?? – safari

+0

использовать «sendMessage (ваше сообщение)» и в обработчике получить это сообщение. –