Android 来自按钮的http请求与来自类的http请求
我得到了一个我创建的类,它生成一个简单的GET请求并显示toast messege和响应 如果我从底部事件调用该函数,单击它会显示带有返回数据的消息,就可以了 但是,如果我从brodcast reciver类调用相同的函数,它只显示数据为“”的massege(null) 我相信它会在我获取数据之前显示massege,并用按钮等待数据 如何从brodcast接收器使其工作 班级:Android 来自按钮的http请求与来自类的http请求,android,class,button,broadcastreceiver,http-request,Android,Class,Button,Broadcastreceiver,Http Request,我得到了一个我创建的类,它生成一个简单的GET请求并显示toast messege和响应 如果我从底部事件调用该函数,单击它会显示带有返回数据的消息,就可以了 但是,如果我从brodcast reciver类调用相同的函数,它只显示数据为“”的massege(null) 我相信它会在我获取数据之前显示massege,并用按钮等待数据 如何从brodcast接收器使其工作 班级: import java.io.BufferedReader; import java.io.IOException;
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接收器开关,它不会返回数据,但会显示toast
public class CustomBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "CustomBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
myclass.doHttpRequest("blabla", context);
break;
} }
}
请帮忙……)谢谢全部修复。。这似乎是一个项目设置错误,或者premissions错误(但我在清单中有premissions…在编译时不能应用于apk) 我将这些类复制到由eclipse的erlier版本制作的另一个项目中,它在那里工作得非常出色 无论如何,谢谢你。。
我花了几个小时试图在代码中修复它。。这是设置…我创建了一个
myclass.java
和CustomBroadcastReceiver.java
并通过从CustomBroadcastReceiver.java
类中删除break语句和一个额外的花括号来尝试您的代码,它对我来说很好
Activity类中的以下代码演示如何为示例/测试广播注册一个无趣的接收器和处理程序
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);
}
希望这能有所帮助。提示:
public abstract void onReceive(Context-Context,Intent-Intent)
此方法始终在其进程的主线程内调用,除非您明确要求使用registerReceiver(BroadcastReceiver,IntentFilter,String,android.os.Handler)在不同的线程上调度它。当它在主线程上运行时,您不应该在其中执行长时间运行的操作。资料来源: