Вызовите startActivity для класса активности из другого класса (оверлей) - PullRequest
2 голосов
/ 02 марта 2012

У меня есть Target.java (это основная деятельность) и Layout.java.Когда пользователь нажимает кнопку, открывается URL.Нажатие кнопки обрабатывается в Layout.java.

    deleteButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
             DebugLog.LOGD("Within onClick event of 'GO' button ");
            Target.openURL();

        }
    });

В Target.java есть статическая функция openURL

    public static void openURL() {
     Uri uri = Uri.parse("http://www.thecinema.in");
     Intent intent = new Intent(Intent.ACTION_VIEW, uri);
     startActivity(intent);

     }

Я хотел бы знать, как я могу заставить этот код работать,поскольку ошибка, которую я получаю сейчас: « Невозможно сделать статическую ссылку на нестатический метод startActivity (Intent) из типа Activity» .Я понимаю, что startActivity не будет работать в статической функции, но, пожалуйста, предложите мне, как я могу достичь цели .. Я новичок в android.FYI .. Спасибо, ребята

-Обновлен код: Layout.java

    deleteButton.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
             DebugLog.LOGD("Within onClick event of 'GO' button ");
            Target iA = new Target();
            iA.openURL();


        }
    });

Target.java

     public void openURL() {    //removed static keyword
     DebugLog.LOGD("Within nDelete event of GO button ");

     Uri uri = Uri.parse("http://www.thecinema.in");
     Intent intent = new Intent(Intent.ACTION_VIEW, uri);
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
     startActivity(intent);

 }

Исключение:

    03-02 10:10:28.351: D/QCAR(6820): Within onClick event of 'GO' button 
    03-02 10:10:28.351: W/dalvikvm(6820): threadid=1: thread exiting with uncaught exception (group=0x400207d8)
    03-02 10:10:28.361: E/AndroidRuntime(6820): FATAL EXCEPTION: main
    03-02 10:10:28.361: E/AndroidRuntime(6820): java.lang.NullPointerException
    03-02 10:10:28.361: E/AndroidRuntime(6820):     at android.app.Activity.startActivityForResult(Activity.java:2817)
    03-02 10:10:28.361: E/AndroidRuntime(6820):     at android.app.Activity.startActivity(Activity.java:2923)
    03-02 10:10:28.361: E/AndroidRuntime(6820):     at com.ingage.pocs.phonegap.Layout$4.onClick(Layout.java:124)
    03-02 10:10:28.361: E/AndroidRuntime(6820):     at android.view.View.performClick(View.java:2408)
    03-02 10:10:28.361: E/AndroidRuntime(6820):     at android.view.View$PerformClick.run(View.java:8816)
    03-02 10:10:28.361: E/AndroidRuntime(6820):     at android.os.Handler.handleCallback(Handler.java:587)
    03-02 10:10:28.361: E/AndroidRuntime(6820):     at  android.os.Handler.dispatchMessage(Handler.java:92)
    03-02 10:10:28.361: E/AndroidRuntime(6820):     at android.os.Looper.loop(Looper.java:123)
    03-02 10:10:28.361: E/AndroidRuntime(6820):     at android.app.ActivityThread.main(ActivityThread.java:4633)

Ребята, что здесь пошло не так ..

Ответы [ 3 ]

6 голосов
/ 06 марта 2012

Мне удалось найти решение для этого вопроса.В Target.java я создал openURL () как:

     public void openURL(Context context) 
    {
     Intent intent = new Intent("com.ingage.pocs.phonegap.URL");
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     context.startActivity(intent);
     }

Я создал новый Activity OpenURL.java и связал с ним намерение "com.ingage.pocs.phonegap.URL":

    package com.ingage.pocs.phonegap;

    import android.app.Activity;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;

    public class OpenURL extends Activity{

        @Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    DebugLog.LOGD("Within BookTicketsActivity Activity GO button ");

    Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.thecinema.in"));
    startActivity(browserIntent);

}

}

Layout.java:

    private Context applicationContext;

    deleteButton.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
         DebugLog.LOGD("Within onClick event of 'GO' button ");
        ImageTargets ia =new ImageTargets();
             ia.openURL(applicationContext);
        iA.openURL();


    }
});

Самое лучшее, это сработало :) Если вы, ребята, придумали лучшее или более разумное решение, пожалуйста, постздесь. спасибо

2 голосов
/ 02 марта 2012

startActivity не является статическим, и поскольку вы вызываете его из Target, а не Layout, он не может разрешить контекст вызова.

Вам необходимо вызвать startActivity из Layout.java или передать ссылку или Target to Layout class

сделать это так

Layout.java:

deleteButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
         DebugLog.LOGD("Within onClick event of 'GO' button ");
         Target.openURL(Layout.this);
    }
});

Target.java:

 public static void openURL(Context context) {
     Uri uri = Uri.parse("http://www.thecinema.in");
     Intent intent = new Intent(Intent.ACTION_VIEW, uri);
     context.startActivity(intent);
 }
1 голос
/ 02 марта 2012

У вас есть

Targets iA = new Targets();

Возможно, вы хотели написать

Target iA = new Target(); 

Это выкинет NullPointerException, потому что вы просите Java найти класс с именем Targets когда ничего не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...