2012-09-23 61 views
-1

我有一类我做,使简单的GET请求,并显示与响应敬酒messege http请求......从巴顿VS从

如果我叫从底事件的函数点击显示器返回数据的消息传递,就好了。

但如果我叫从brodcast reciver类相同的功能,它只是显示我相信的,这显示了massege我能得到的数据之前,并与数据“”(空)

的massege它等待数据的按钮..

我该如何使它从brodcast reciver工作?

类:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 

import android.app.Activity; 
import android.content.Context; 
import android.widget.Toast; 

public class myclass{ 


public static void doHttpRequest(String param1, Context context){ 

    String ret=""; 

    try { 
     URL url = new URL("http://website.com/page?param="+param1); 
     HttpURLConnection con = (HttpURLConnection) url 
      .openConnection(); 
     ret=readStream(con.getInputStream()); 
     } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    CharSequence text = "return data- "+ret; 
    int duration = Toast.LENGTH_LONG; 
    Toast toast = Toast.makeText(context, text, duration); 
    toast.show(); 
} 



    private static String readStream(InputStream in) { 
BufferedReader reader = null; 
String line = ""; 
String alllines = ""; 
try { 
    reader = new BufferedReader(new InputStreamReader(in)); 

    while ((line = reader.readLine()) != null) { 
    alllines=alllines+line; 
    } 

    return alllines; 

} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    if (reader != null) { 
     try { 
     reader.close(); 

     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
    } 

} 
return alllines; 

} 
} 

从按钮正常工作:

final Button button = (Button) findViewById(R.id.button1); 
button.setOnClickListener(new View.OnClickListener() { 
public void onClick(View v) { 

myclass.doHttpRequest("blabla", getBaseContext()); 

}}); 

来自不同类的brodcast reciver巫婆它不会返回数据,表示的是烤面包..

public class CustomBroadcastReceiver extends BroadcastReceiver { 

private static final String TAG = "CustomBroadcastReceiver"; 

@Override 
public void onReceive(Context context, Intent intent) { 


    myclass.doHttpRequest("blabla", context); 


    break; 
    } } 


    } 

请帮助.... :)感谢

回答

0

所有固定..它似乎是一个项目设置错误,或premmisions错误(但我有在清单中的准备......在编译时一定不能在apk中应用)

我复制了类来引入项目通过月食erlier版本所做的,和它的作品有像一个魅力...

我还是谢谢你.. 我尝试了好几个小时来修复它的代码..它是设置....

+0

提示: '公共抽象无效的onReceive(上下文语境,意图意图)' 这个方法总是被调用它的进程的主线程中,除非你明确地要求它使用registerReceiver(不同的线程调度BroadcastReceiver,IntentFilter,String,android.os.Handler)。当它在主线程上运行时,不应该在其中执行长时间运行的操作。 来源:http://developer.android.com/reference/android/content/BroadcastReceiver.html –

0

我创建了一个myclass.javaCustomBroadcastReceiver.java,并通过从中删除break语句和一个额外的大括号来试用您的代码班,它对我很好。

Activity类中的以下代码演示了注册,无兴趣的接收器和一个处理样本/测试广播的Handler。

CustomBroadcastReceiver customBroadcastReceiver; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    customBroadcastReceiver = new CustomBroadcastReceiver(); 
    registerReceiver(cusoBroadcastReceiver, new IntentFilter("com.example.app.testbroadcast")); 

      // For test broadcast only. 
    new Handler().postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      sendBroadcast(new Intent("com.example.app.testbroadcast")); 
     } 
    }, 2000); 

} 

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

希望这会有所帮助。