我是android新手。我的登录应用程序运行正常,但当我将登录用户活动转换为片段并获得以下错误时:
错误:
package com.androidatc.customviewindrawer;
import android.app.Activity;
import android.app.Fragment;
import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import cz.msebera.android.httpclient.Header;
/**
*
* Login Activity Class
*
*/
public class LoginFrag extends Fragment {
// Progress Dialog Object
ProgressDialog prgDialog;
// Error Msg TextView Object
TextView errorMsg;
// Email Edit View Object
EditText emailET;
// Passwprd Edit View Object
EditText pwdET;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.login, container, false);
errorMsg = (TextView) rootView.findViewById(R.id.login_error);
// Find Email Edit View control by ID
emailET = (EditText) rootView.findViewById(R.id.loginEmail);
// Find Password Edit View control by ID
pwdET = (EditText) rootView.findViewById(R.id.loginPassword);
// Instantiate Progress Dialog object
prgDialog = new ProgressDialog(this.getActivity());
// Set Progress Dialog Text
prgDialog.setMessage("Please wait...");
// Set Cancelable as False
prgDialog.setCancelable(false);
return rootView;
}
/**
* Method gets triggered when Login button is clicked
*
* @param view
*/
public void loginUser(View view){
// Get Email Edit View Value
String email = emailET.getText().toString();
// Get Password Edit View Value
String password = pwdET.getText().toString();
// Instantiate Http Request Param Object
RequestParams params = new RequestParams();
// Put Http parameter username with value of Email Edit View control
params.put("username", email);
// Put Http parameter password with value of Password Edit Value control
params.put("password", password);
final int DEFAULT_TIMEOUT = 200000 * 1000000000;
// Make RESTful webservice call using AsyncHttpClient object
AsyncHttpClient client = new AsyncHttpClient();
client.setTimeout(DEFAULT_TIMEOUT);
client.get("http://abc/ilsdi.pl?service=AuthenticatePatron", params ,new AsyncHttpResponseHandler() {
public void onSuccess(int i, Header[] headers, byte[] bytes) {
Toast.makeText(getActivity().getApplicationContext(), "XML File: " + headers, Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {
Toast.makeText(getActivity().getApplicationContext(), "Status code :" + i + "errmsg : " + throwable.getMessage(), Toast.LENGTH_LONG).show();
Toast.makeText(getActivity().getApplicationContext(), "Unexpected Error occcured! [Most common Error: Device might not be connected to Internet or remote server is not up and running]", Toast.LENGTH_LONG).show();
}
public void onSuccess(String response) {
// Hide Progress Dialog
prgDialog.hide();
Toast.makeText(getActivity().getApplicationContext(), "XML File: " + response, Toast.LENGTH_LONG).show();
Toast.makeText(getActivity().getApplicationContext(), "You are successfully logged in!", Toast.LENGTH_LONG).show();
navigatetoHomeActivity();
//e.printStackTrace();
}
// When the response returned by REST has Http response code other than '200'
public void onFailure(int statusCode, Throwable error,
String content) {
// Hide Progress Dialog
prgDialog.hide();
// When Http response code is '404'
if(statusCode == 404){
Toast.makeText(getActivity().getApplicationContext(), "Requested resource not found", Toast.LENGTH_LONG).show();
}
// When Http response code is '500'
else if(statusCode == 500){
Toast.makeText(getActivity().getApplicationContext(), "Something went wrong at server end", Toast.LENGTH_LONG).show();
}
// When Http response code other than 404, 500
else{
Toast.makeText(getActivity().getApplicationContext(), "Status code :" + statusCode + "errmsg : " + error.getMessage(), Toast.LENGTH_LONG).show();
Toast.makeText(getActivity().getApplicationContext(), "Unexpected Error occcured! [Most common Error: Device might not be connected to Internet or remote server is not up and running]", Toast.LENGTH_LONG).show();
}
}
});
}
/**
* Method which navigates from Login Activity to Home Activity
*/
public void navigatetoHomeActivity(){
Intent homeIntent = new Intent(getActivity().getApplicationContext(),HomeActivity.class);
homeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
public void onFragmentInteraction(Uri uri);
}
}
Main.activity
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dip" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dip"
android:text="@string/login_title"
android:textSize="25sp"
android:textStyle="bold" />
<EditText
android:id="@+id/loginEmail"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Enter your User ID"
android:inputType="textEmailAddress" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dip"
android:text="@string/pwd" />
<EditText
android:id="@+id/loginPassword"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Enter Password"
android:inputType="textPassword" />
<TextView
android:id="@+id/login_error"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dip"
android:textColor="#e30000"
android:textStyle="bold" />
<Button
android:id="@+id/btnLogin"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
android:background="#ff6347"
android:onClick="loginUser"
android:text="Login"
android:textColor="#fff" />
<Button
android:id="@+id/btnLinkToRegisterScreen"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dip"
android:background="@null"
android:onClick="navigatetoRegisterActivity"
android:text="Signup"
android:textColor="#228b22"
android:textStyle="bold" />
</LinearLayout>
</ScrollView>
LoginFrag.java
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.package"
minSdkVersion 15
targetSdkVersion 23
versionCode 6
versionName "2.0.1"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.0'
}
login.xml
<tr>
感谢任何建议。感谢
答案 0 :(得分:1)
使用setOnClickListener
。从XML中删除 android:onClick="loginUser"
(仅适用于片段)
<Button
android:id="@+id/btnLogin"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
android:background="#ff6347"
android:text="Login"
android:textColor="#fff" />
然后在onCreateView
部分
Button button = (Button) view.findViewById(R.id.btnLogin):
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// Add your code
}
});
答案 1 :(得分:0)
如果您使用的是android:onClick属性,它将调用活动的方法,而不是片段。