0

インテントサービスでjsonファイルをダウンロードしようとしていますが、ダウンロードが完了したら、新しいアクティビティを開始したいと思います。このアクティビティには2つのタスクがあります。-2つのオプションでalertDialogを表示します:restart/not-更新のタイムスタンプをonsharedpreferencesに保存します

しかし、私はいつもエラーがあります:

08-26 21:31:06.162: W/ActivityManager(96): Unable to start service Intent { cmp=com.hera.ontdekdelft.RESTARTACTIVITY }: not found

もちろん、私は多くの調査を行い、多くの人々がこの問題を抱えていることを知りました。私は与えられた解決策のほとんどを試したと思いますが、どれも私にはうまくいかないようです。

  • マニフェストを確認しました。サービスはアクティビティではなく、アプリケーション内で宣言されています。
  • 私は自分のインテントをさまざまな方法で呼んでみました:フルパス(com.hera.ontdekdelft.RESTARTACTIVITYなど)そしてこのように:Intent restartIntent=new Intent(DownloadService.this, RestartActivity.class);

動作しない、または悪化させるだけの、さらにいくつかのこと。今何が起こっているのかというと、ポップアップがないので、次の再起動後に新しいデータが使用されます(タイムスタンプのみが保存されないため、利用可能な更新を確認する必要があります)。クラッシュはありませんが、実際には機能していません。

誰かがこの問題を知っている/私が失敗している場所を見る/解決策を持っていますか?ありがとう!

私のサービス:

> import java.io.File; import java.io.FileOutputStream; import
> java.io.IOException; import java.io.InputStream; import
> java.io.InputStreamReader; import java.net.URL;
> 
> import android.app.Activity; import android.app.IntentService; import
> android.content.Intent; import android.net.Uri; import
> android.os.Environment;
> 
> public class DownloadService extends IntentService {
> 
>   private int result = Activity.RESULT_CANCELED;   public String
> strfilename="DelftVenues";   public String foldername;
> 
>   public DownloadService() {
>     super("DownloadService");   }
> 
> 
>   @Override   protected void onHandleIntent(Intent intent) {    File
> dir = new File(Environment.getExternalStorageDirectory() +
> "/testOntdekDelftMap");
>       foldername = dir.toString();
>     
>     
>     
>     
>     Uri data = intent.getData();
>     String urlPath = intent.getStringExtra("urlpath");
>     String fileName = data.getLastPathSegment();
>     File output = new File(foldername,fileName);
>     if (output.exists()) {
>       output.delete();
>     }
> 
>     InputStream stream = null;
>     FileOutputStream fos = null;
>     try {
>         File filename = new File(foldername, strfilename);
>       URL url = new URL(urlPath);
>       stream = url.openConnection().getInputStream();
>       InputStreamReader reader = new InputStreamReader(stream);
>       fos = new FileOutputStream(filename);
>       int next = -1;
>       while ((next = reader.read()) != -1) {
>         fos.write(next);
>       }
>       // Sucessful finished
>       result = Activity.RESULT_OK;
> 
>     } catch (Exception e) {
>       e.printStackTrace();
>     } finally {
>       if (stream != null) {
>         try {
>           stream.close();
>         } catch (IOException e) {
>           e.printStackTrace();
>         }
>       }
>       if (fos != null) {
>         try {
>           fos.close();
>         } catch (IOException e) {
>           e.printStackTrace();
>         }
>       }
>     }
>     
>     System.out.println("result: "+ result);
>     Intent restartIntent=new Intent(DownloadService.this, RestartActivity.class);
>     this.startService(restartIntent);
>     
>     
>        } }

開始したいクラス(restartActivity)

public class RestartActivity extends Activity{

     public String UPDATE_TIMESTAMP;
     AlertDialog restartDialog;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // XXX Auto-generated method stub
        super.onCreate(savedInstanceState);


        restartDialog= new AlertDialog.Builder(RestartActivity.this).create();  
        String title, text, button1,button2;
        String language =  Locale.getDefault().getISO3Language();
        if (language.equals("nld")){
            title= "Herstarten?";
            text= "De update is voltooid. Wilt u de applicatie nu opnieuw opstarten?";
            button1="Ja";
            button2="Nee";
        }else{
            title="Restart?";
            text= "The application has been updated. Do you wish to restart now?";
            button1="Yes";
            button2="No";
        }
        restartDialog.setTitle(title);  
        restartDialog.setMessage(text);  
        restartDialog.setButton(button1, new DialogInterface.OnClickListener() {  
          public void onClick(DialogInterface dialog, int which) {  
          // restart applicatino
                Intent intent = new Intent(RestartActivity.this, StartUp.class);
                // Create a new Messenger for the communication back
                startService(intent);
            }
        });
        restartDialog.setButton2(button2, new DialogInterface.OnClickListener() {  
              public void onClick(DialogInterface dialog, int which) {  
                   finish();
                  return;

              }
            });
        restartDialog.show();

        int timestampNow=(int) (System.currentTimeMillis()/1000);
        setLastUpdateTimeStamp(timestampNow);

    }

    // timestamp opslaan
    public void setLastUpdateTimeStamp(int timestamp){
         SharedPreferences savedTimeStamp = getSharedPreferences(UPDATE_TIMESTAMP, MODE_PRIVATE);
          SharedPreferences.Editor editor = savedTimeStamp.edit();
          editor.putInt("timestamp", timestamp);

          // Commit the edits!
          editor.commit();

    }

}

私のマニフェストの一部:

// lot more activities

             <activity
    android:name=".RestartActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="com.hera.ontdekdelft.RESTARTACTIVITY" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>


 <service android:name=".DownloadService" >
        </service>



    </application>

</manifest>
4

1 に答える 1

2

これとともに:

Intent restartIntent=new Intent(DownloadService.this, RestartActivity.class);
this.startService(restartIntent);

あなたは実際に「サービスとしてRestartActivityを開始する」と言っています。それはあなたが望むものではありません。これは、エラー' service Intent ...notfound`を説明しています。

編集:サービスからアクティビティを開始する方法については、この質問を参照してください。そして、コールバックで同等の何かに遭遇しbutton1ます。そこで使用できますstartActivity(intent)

また、いくつかのオフトピックのヒント:UIアイテム(つまりボタン)にわかりやすい名前を付けることを検討し、strings.xmlとAndroidの組み込みのローカリゼーションの力を使用してみませんか?

于 2012-08-26T20:07:49.763 に答える