L'appel de Méthode dans Android
Je suis en train d'appeler une méthode que j'ai écrite. Il compile à l'exception d'une ligne de...
public class http extends Activity {
httpMethod(); //will not compile
public void httpMethod(){
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://site/api/");
try {
//Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
//Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
String test = "hello";
TextView myTextView = (TextView) findViewById(R.id.myTextView);
myTextView.setText(test);
} catch (ClientProtocolException e) {
//TODO Auto-generated catch block
} catch (IOException e) {
//TODO Auto-generated catch block
}
}
}
Je ne suis pas le meilleur java gars, mais je pense que l'appel de la méthode comme reçoive une réponse. "Bonjour" n'est pas affiché mais...
Comment appeler la méthode?
- Montrez-nous votre journal d'erreurs et plus de code de votre classe (qui rend la chose facile). Si vous étendez un Activité pourquoi vous n'avez pas au moins la méthode onCreate?
- En plus Jon réponse, vous devez avoir fonctionnement en Réseau dans un thread séparé. Envisager AsyncTask, sinon vous obtiendrez une exception si le ciblage android os < 3.0
Vous devez vous connecter pour publier un commentaire.
EDIT: Juste pour laisser personne n'en doute, cette réponse n'montre pourquoi vous obtenez une erreur de compilation. Il ne pas adresse que vous devriez faire dans le thread qui et à quel moment, dans Android.
Personnellement, je vous recommande de mettre Android en bas pour le moment, apprendre Java dans un environnement de plus simple (par exemple, la console apps) et ensuite, lorsque vous êtes à l'aise avec la langue, revoir Android et d'apprendre toutes les exigences de développement Android - qui sont évidemment beaucoup plus que juste la langue.
Que vous essayez d'appeler une méthode comme une déclaration directement au sein de votre classe. Vous ne pouvez pas le faire - il a de faire partie d'un constructeur, d'initialiseur de bloc, une autre méthode, ou d'initialiseur statique. Par exemple:
Notez que j'ai seulement donné cet exemple pour vous montrer un valide de classe Java. Il n'est pas dire que vous devez réellement être l'appel de la méthode à partir de votre constructeur.
Activity
est généralement pas une bonne chose à faire (à moins que le dev comprend toutes les conséquences). Le lieu habituel de faire ce que l'OP veut serait enonCreate(...)
,onResume()
ou, plus probablement à quelque chose comme unButton
gestionnaire d'événement. Penser à elle, à l'aide d'un constructeur de l'échec de ce que l'OP veut faire.httpMethod()
à partir d'un constructeur à un échec, mais la définition de constructeurs d'une classe qui étendActivity
est un sujet avancé. Il peut être fait, mais il y a peu de cas où il doit être fait et le dev doit pleinement comprendre ce que seront les conséquences et ce qui peut/ne peut pas être fait à partir d'un constructeur.Activity
classe et aussi de ne pas mettre le "java" tag sur les questions liées à Android (à moins pertinent). - Je modifier pour supprimer le "java" balise de DONC questions quand je vois qu'ils sont spécifiques à Android (en particulier liées à laActivity
) tout simplement parce que "valide Java" (pour citer votre mise en garde) ne s'applique pas toujours. Le code dans le cas des OP question est brisé, mais l'exemple de votre réponse ne répare pas. Je me demande combien de fois les électeurs votre réponse à la question de savoir quelque chose sur Android.doit être à l'intérieur d'une autre méthode ou le constructeur (ou) assignée à la variable. Je soupçonne votre exigence pourrait être l'appel de l'appelant
httpMethod()
dansonCreate()
(ou)onResume()
parce que vous êtes l'extension de l'Activité.Je pense que peut-être vous avez besoin d'apprendre plus à propos de Android Application Des Fondamentaux et en particulier la L'activité classe et la
Activity
cycle de vie.Votre premier problème est lié à la tentative de définir une chaîne de test sur votre
TextView
.NE PAS essayer de le faire dans une méthode qui est appelée par le constructeur. Peut-être plus important encore, oublier jamais la définition d'un constructeur (ou constructeurs) pour toute la classe que vous créez qui s'étend
Activity
.Afin d'être capable de manipuler les éléments de l'INTERFACE utilisateur d'un
Activity
, l'affichage du contenu doit être gonflé. Dans ce cas, soit implicitement en utilisantsetContentView(...)
ou explicitement, à l'aide deLayoutInflater
. Il est plus habituel de le faire dansonCreate(...)
et jusqu'à ce que cela est fait, tenter d'utiliserfindViewById(...)
sera de retournull
. C'est pourquoi tenter de faire quoi que ce soit avec l'INTERFACE utilisateur à partir d'unActivity
constructeur va pas, sauf si vous explicitement gonfler votre disposition dans le constructeur (ou une autre méthode appelée par elle). Je ne suis pas sûr qu'il est même possible de gonfler la disposition en ce moment et ce n'est certainement pas quelque chose que je vous recommande, même si c'est possible. Comme je l'ai dit, oubliez les constructeurs deActivities
.De faire ce que vous voulez faire (à des fins de test), vous devrez faire quelque chose comme...
Votre deuxième problème, comme Maxim commentaire de votre question, même si mon exemple de travail pour les anciennes versions d'Android, les versions plus récentes, une exception sera levée si vous essayez d'effectuer les opérations de réseau sur le thread principal (aka thread d'INTERFACE utilisateur), car ils sont potentiellement beaucoup de temps et peut causer le fil bloqué. Maxim suggère que vous devriez faire cela avec un
AsyncTask
ou sur certains autresThread
que le principal (UI) thread.