-1

私が作成したクラスを取得しました。これは、単純な GET 要求を作成し、応答と共にトースト メッセージを表示します...

ボトムイベントクリックから関数を呼び出すと、返されたデータを含むメッセージが表示されます。

しかし、ブロードキャストレシーバークラスから同じ関数を呼び出すと、データ '' (null) でマッサージが表示されるだけです

データを取得する前にマッサージが表示され、ボタンを使用してデータを待機していると思います..

どうすればブロードキャストレシーバーから動作させることができますか?

クラス:

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());

 }});

異なるクラスのブロードキャスト レシーバー ウィッチからは、データは返されませんが、トーストが表示されます。

public class CustomBroadcastReceiver extends BroadcastReceiver {

private static final String TAG = "CustomBroadcastReceiver";

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


    myclass.doHttpRequest("blabla", context);


    break;
   } }


    }

助けてください.... :)ありがとう

4

2 に答える 2

0

すべて修正されました..プロジェクト設定エラー、または事前設定エラーのようです(ただし、マニフェストに事前設定がありました...コンパイル中にapkに適用してはなりません)

クラスをEclipseの古いバージョンで作成された別のプロジェクトにコピーしましたが、そこでは魅力的です...

とにかくありがとう..私はコードでそれを修正するために何時間も試みました..そしてそれは設定でした....

于 2012-09-24T00:23:20.897 に答える
0

myclass.javaandを作成し、クラスCustomBroadcastReceiver.javaから break ステートメントと余分な中括弧を 1 つ削除してコードを試してみましたが、問題なく動作しました。CustomBroadcastReceiver.java

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);
} 

お役に立てれば。

于 2012-09-24T00:26:51.087 に答える