2016-03-26 13 views
0

ここに私のJavaコードがあります。私の問題は、別のアクティビティを開くためにOnPostExecuteにコードを追加したときです。 Android Studioが初めてのので、初めてこの問題に直面しています。 AndroidのonPostExecuteメソッドから新しいアクティビティを開始できません。

Start Activity error

Cannot resolve constructor

package com.example.gonalo.meu; 

import android.app.AlertDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLEncoder; 

import static android.support.v4.app.ActivityCompat.startActivity; 
import static android.support.v4.content.ContextCompat.startActivities; 

/** 
* Created by Gonçalo on 23/03/2016. 
*/ 

public class BackGroundWorker extends AsyncTask<String,Void,String> { 
Context context; 
AlertDialog alertDialog; 
BackGroundWorker (Context ctx) { 
    context = ctx; 
} 

@Override 
protected String doInBackground(String... params) { 
    String type = params[0]; 
    String login_url = "http://192.168.1.79/login.php"; 
    String register_url = "http://192.168.1.79/register.php"; 
    //String verifyuserpass_url = "http://192.168.0.102/verifyuserpass.php"; 
    //String verifypass_url = "http://192.168.0.102/verifyuserpass.php"; 
    if(type.equals("login")) { 
     try { 
      String user_name = params[1]; 
      String password = params[2]; 
      URL url = new URL(login_url); 
      HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
      httpURLConnection.setRequestMethod("POST"); 
      httpURLConnection.setDoOutput(true); 
      httpURLConnection.setDoInput(true); 
      OutputStream outputStream = httpURLConnection.getOutputStream(); 
      BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
      String post_data = URLEncoder.encode("user_name", "UTF-8") + "=" + URLEncoder.encode(user_name, "UTF-8") + "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(password, "UTF-8"); 
      String user = URLEncoder.encode(user_name, "UTF-8");//guarda o nome de utilizador introduzido 
      String pass = URLEncoder.encode(password, "UTF-8");//guarda a pass introduzido 
      System.err.println("------------------------------------------"); 
      /*/ if(user.equals("Nome de Utilizador")){ 
        if(pass.equals("Password")) { 
         System.err.println("Entrou no if"); 
         startActivity(new Intent(this, Pagina1.class));} 
/*/ 
      bufferedWriter.write(post_data); 
      bufferedWriter.flush(); 
      bufferedWriter.close(); 
      outputStream.close(); 
      InputStream inputStream = httpURLConnection.getInputStream(); 

      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1")); 
      String result=""; 
      String line=""; 
      while((line = bufferedReader.readLine())!= null) { 
       result +=line; 

      } 

      bufferedReader.close(); 
      inputStream.close(); 
      httpURLConnection.disconnect(); 
      return result; 

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

    } else if(type.equals("register")) { 
     try { 
      String name = params[1]; 
      String surname = params[2]; 
      String age = params[3]; 
      String username = params[4]; 
      String password = params[5]; 
      URL url = new URL(register_url); 
      HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); 
      httpURLConnection.setRequestMethod("POST"); 
      httpURLConnection.setDoOutput(true); 
      httpURLConnection.setDoInput(true); 
      OutputStream outputStream = httpURLConnection.getOutputStream(); 
      BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
      String post_data = URLEncoder.encode("name", "UTF-8")+"="+URLEncoder.encode(name, "UTF-8")+"&" 
        + URLEncoder.encode("surname", "UTF-8")+"="+URLEncoder.encode(surname, "UTF-8")+"&" 
        + URLEncoder.encode("age", "UTF-8")+"="+URLEncoder.encode(age, "UTF-8")+"&" 
        + URLEncoder.encode("username", "UTF-8")+"="+URLEncoder.encode(username, "UTF-8")+"&" 
        +URLEncoder.encode("password", "UTF-8")+"="+URLEncoder.encode(password, "UTF-8"); 

      bufferedWriter.write(post_data); 
      bufferedWriter.flush(); 
      bufferedWriter.close(); 
      outputStream.close(); 
      InputStream inputStream = httpURLConnection.getInputStream(); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1")); 
      String result=""; 
      String line=""; 
      while((line = bufferedReader.readLine())!= null) { 
       result += line; 

       } 
      bufferedReader.close(); 
      inputStream.close(); 
      httpURLConnection.disconnect(); 
      return result; 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

    return null; 
} 



@Override 
protected void onPreExecute() { 
    alertDialog = new AlertDialog.Builder(context).create(); 
    alertDialog.setTitle("Login Status"); 

} 

@Override 
protected void onPostExecute(String result) { 
    alertDialog.setMessage(result); 
    alertDialog.show(); 
    if (result.equals("Login Success")); 
    Intent myIntent = new Intent(this, Pagina1.class); // Im facing problem here 
    startActivity(myIntent); // Im facing problem here 

} 

@Override 
protected void onProgressUpdate(Void... values) { 
    super.onProgressUpdate(values); 
} 
} 

は、私はいくつかの簡単なコードを追加しようとしていると、私のAndroidのは、それを認識しません。

+0

問題を理解するためにアップロードした画像をご覧ください。 –

+0

今はうまくいくのですか? – Vucko

答えて

0

ブロは、あなたの問題は、あなたがテントでthisを渡しているということです、そしてthisは現在Contextは(アクティビティコンテキストを持っている)が何に由来しないあるAsyncTaskです。その行を次のように置き換えてください:

startActivity(new Intent(context, Pagina1.class));} 
//context being the field you initialize in the constructor 

これは動作します。 私は、あなたはおそらくこれが活動を開始するための正しい方法であることをどこかで発見した知っている:それは別のActivityからであるときIntent()コンストラクタの最初のパラメータはContext、活動なので、

startActivity(new Intent(this, YourClass.class)); 

ことがあります確かに持ってます。 Fragments,などはContextから派生していないため、startActivityに連絡するときにはthisに電話することはできません。

+0

ありがとう、それは私の問題を解決!あなたの最高の仲間。 –

+0

確かなものです。あなたの次の努力の中で最高の運があります。 – Vucko

0

アンドロイドスタジオを再起動してください。マニフェストを追加したかどうかを確認してください。

0

この

テントmyIntent =新しいテント(これ、Pagina1.class)を試してみてください。

上記の文では、です。このは、現在のクラスオブジェクトがアプリケーションのアクティビティやコンテキストではないことを示します。あなたはアプリケーションのコンテキストを提供する必要があります。現在のクラスはアクティビティではないためです。声明の上ごonPostExecute()方法で上記のステートメントを置き換え

Intent myIntent = new Intent(getApplicationContext(), Pagina1.class); 

この文を試してみてください。この

ようになるはずです。

+0

'AsyncTask'で' Context context'フィールドを使うことができたとき、なぜ彼は 'getApplicationContext()'でしょうか?また、私はすでにそれに答えました:D – Vucko

関連する問題